Magnetoresistive random access memory (MRAM) is a non-volatile memory where data is stored in magnetic storage elements. In simple configurations, each cell has two ferromagnetic plates, each of which can hold a magnetic field, separated by a thin insulating layer. One of the plates is a permanent magnet set to a selected polarity and the other plate's field can be changed to match that of an external field to store a bit. Depending upon the field, the cell is either in the low (RL) resistive state, which may represent a logic “1”, or the high (RH) resistive state, which may represent a logic “0”.
Due to process variations, individual MRAM cells in an array can have different RH values (when programmed at RH) and different RL values (when programmed at RL). FIG. 1 is a graph illustrating the distribution or count of high resistance (RH) and low resistance (RL) value across an array of MRAM cells. Process variations can result in an overlap in the resistance values for the high (RH) and low (RL) states, which can lead to read errors. This overlap is defined between RHmin and RLmax. Conventional sense amplifiers cannot account for these process variations.